home *** CD-ROM | disk | FTP | other *** search
/ isnet Internet / Isnet Internet CD.iso / prog / hiz / 09 / 09.exe / adynware.exe / perl / lib / site / qd.pl < prev    next >
Encoding:
Perl Script  |  1999-12-28  |  16.8 KB  |  615 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29. {
  30. package qd;
  31.  
  32. $X11FONTS = '/usr/local/X11R5/X11/fonts/bdf';
  33.  
  34. $TIMES = 20;
  35. $HELVETICA = 21;
  36. $COURIER = 22;
  37. $SYMBOL = 23;
  38. $NEWCENTURYSCHOOLBK = 34;
  39.  
  40. $PLAIN = 0;
  41. $BOLD = 1;
  42. $ITALIC = 2;
  43. $UNDERLINE = 4;
  44.  
  45. $GRAY = pack ('n4',0xAA55,0xAA55,0xAA55,0xAA55);
  46. $DKGRAY = pack ('n4',0xDD77,0xDD77,0xDD77,0xDD77);
  47. $LTGRAY = pack ('n4',0x8822,0x8822,0x8822,0x8822);
  48. $WHITE = pack('n4',0x0000,0x0000,0x0000,0x0000);
  49. $BLACK = pack ('n4',0xFFFF,0xFFFF,0xFFFF,0xFFFF);
  50.  
  51. $BLACKCOLOR = 33;
  52. $WHITECOLOR = 30;
  53. $REDCOLOR = 209;
  54. $GREENCOLOR = 329;
  55. $BLUECOLOR = 389;
  56. $CYANCOLOR = 269;
  57. $MAGENTACOLOR = 149;
  58. $YELLOWCOLOR = 89;
  59.  
  60. $PICTHEADER = "\0" x 512;
  61.  
  62. $fudgefactor = 0.55;
  63. $ITALICEXTRA = 0.05;
  64. $BOLDEXTRA = 0.08;
  65.  
  66. $textFont = $HELVETICA;
  67. $textSize = 12;
  68. $textFace = $PLAIN;
  69. $rgbfgcolor = pack('n*',0xFFFF,0xFFFF,0xFFFF);
  70. $rgbbgcolor = pack('n*',0,0,0);
  71. $fgcolor = $BLACKCOLOR;
  72. $bgcolor = $WHITECOLOR;
  73. $polySave = undef;
  74.  
  75. $_PnPattern = $BLACK;
  76. $_polyName = "polygon000";
  77.  
  78. sub OpenPicture {               # begin a picture
  79.     local($rect) = @_;
  80.     $currH = $currV = 0;        # current pen position
  81.     $pict = $PICTHEADER;        # the header
  82.     $pict .= pack('n',0);       # size int (placeholder)
  83.     $pict .= $rect;             # pict frame
  84.     $pict .= pack('n',0x0011);  # Type 2 picture
  85.     $pict .= pack('n',0x02FF);  # version number
  86.     $pict .= pack('nC24',0x0C00,0);     # reserved header opcode + 24 bytes of reserved data
  87.     &TextFont($textFont);
  88.     &TextSize($textSize);
  89.     &TextFace($textFace);
  90. }
  91.  
  92. sub ClosePicture {              # close pict and return it
  93.     $pict .= pack ('n',0x00FF); # end of pict code
  94.     substr($pict,512,2) = pack('n',length($pict) - 512); # fill in length 
  95.     return $pict;
  96. }
  97.  
  98. sub ClipRect {
  99.     local($rect) = @_;
  100.     $pict .= pack('nn',0x0001,0x0A) . $rect;
  101. }
  102.  
  103. sub PenPat {
  104.     local($newpat) = @_;
  105.     return unless $newpat ne $_PnPattern;
  106.     $_PnPattern = $newpat;
  107.     $pict .= pack('n',0x0009) . $_PnPattern;
  108. }
  109.  
  110. sub RGBForeColor {
  111.     local($rgb) = pack('n3',@_);
  112.     return unless $rgb ne $rgbfgcolor;
  113.     $rgbfgcolor = $rgb;
  114.     $pict .= pack('n',0x001A) . $rgbfgcolor;
  115. }
  116.  
  117. sub RGBBackColor {
  118.     local($rgb) = pack('n3',@_);
  119.     return unless $rgb ne $rgbbgcolor;
  120.     $rgbbgcolor = $rgb;
  121.     $pict .= pack('n',0x001B) . $rgbbgcolor;
  122. }
  123.  
  124. sub FgColor {
  125.     local($color) = @_;
  126.     return unless $color != $fgcolor;
  127.     $fgcolor = $color;
  128.     $pict .= pack('nL',0x000E,$color);
  129. }
  130.  
  131. sub BgColor {
  132.     local($color) = @_;
  133.     return unless $color != $bgcolor;
  134.     $bgcolor = $color;
  135.     $pict .= pack('nL',0x000F,$color);
  136. }
  137.  
  138. sub TextFont {
  139.     local($font) = @_;
  140.     $textFont = $font;
  141.     $pict .= pack('nn',0x0003,$font);
  142. }
  143.  
  144. sub TextSize {
  145.     local($size) = @_;
  146.     $textSize = $size;
  147.     $pict .= pack('nn',0x000D,$size);
  148. }
  149.  
  150. sub PenSize {
  151.     local($h,$v) = @_;
  152.     $pict .= pack('nnn',0x0007,$v,$h);
  153. }
  154.  
  155. sub TextFace {
  156.     return if $textFace == @_[0];
  157.     $textFace = @_[0];
  158.     $pict .= pack ('nCC',0x0004,$textFace,0); # (zero added to pad to word)
  159. }
  160.  
  161. sub DrawString {
  162.     local($text) = @_;
  163.     $text .= "\0" x ((length($text) + 1) % 2); # pad text to an odd length
  164.     $pict .= pack('nnnC',0x0028,$currV,$currH,length($text)) . $text;
  165. }
  166.  
  167. sub SetRect {
  168.     local(*r,$h1,$v1,$h2,$v2) = @_;
  169.     $r = pack ('n4',$v1,$h1,$v2,$h2);
  170. }
  171.  
  172. sub OffsetRect {
  173.     local(*r,$x,$y) = @_;
  174.     local($v1,$h1,$v2,$h2) = unpack('n4',$r);
  175.     $h1 += $x; $h2 += $x;
  176.     $v1 += $y; $v2 += $y;
  177.     $r = pack ('n4',$v1,$h1,$v2,$h2);    
  178. }
  179.  
  180. sub InsetRect {
  181.     local(*r,$x,$y) = @_;
  182.     local($v1,$h1,$v2,$h2) = unpack('n4',$r);
  183.     $h1 -= int($x/2); $h2 -= int($x/2);
  184.     $v1 -= int($y/2); $v2 -= int($y/2);
  185.     $r = pack ('n4',$v1,$h1,$v2,$h2);    
  186. }
  187.  
  188.  
  189. sub a2r {
  190.     local($top,$left,$bottom,$right) = @_;
  191.     return pack('n4',$top,$left,$bottom,$right);
  192. }
  193.  
  194. sub r2a {
  195.     local($rect) = @_;
  196.     return unpack('n4',$rect);
  197. }
  198.  
  199. sub aa2r {
  200.     local(%r) = @_;
  201.     return pack('n4',$r{'top'},$r{'left'},$r{'bottom'},$r{'right'});
  202. }
  203.  
  204. sub r2aa {
  205.     local($r) = @_;
  206.     local(%r);
  207.     ($r{'top'},$r{'left'},$r{'bottom'},$r{'right'}) = unpack('n4',$r);
  208.     return %r;
  209. }
  210.  
  211. sub MoveTo {
  212.     ($currH,$currV) = @_;
  213. }
  214.  
  215. sub Move {
  216.     local($dh,$dv) = @_;
  217.     $currH += $dh;
  218.     $currV += $dv;
  219. }
  220.  
  221. sub LineTo {
  222.     local($h,$v) = @_;
  223.     if (defined(@polySave)) {
  224.         &_addVertex(*polySave,$h,$v)
  225.     } else {
  226.         $pict .= pack('nn4',0x0020,$currV,$currH,$v,$h);
  227.     }
  228.     ($currH,$currV) = ($h,$v);
  229. }
  230.  
  231. sub Line {
  232.     local($dh,$dv) = @_;
  233.     if (defined(@polySave)) {
  234.         &_addVertex(*polySave,$h,$v);
  235.     } else {
  236.         $pict .= pack('nn4',0x0020,$currV,$currH,$currV+$dv,$currH+$dh);
  237.     }
  238.     ($currH,$currV) = ($currH+$dh,$currV+$dv);
  239. }
  240.  
  241. sub Scale { #use picComment to set laserwriter line scaling
  242.     local($numerator,$denominator)= @_;
  243.     $pict .= pack('nnnn2',0x00A1,182,4,$numerator,$denominator);
  244. }
  245.  
  246.  
  247. sub FrameRect {
  248.     local($rect) = @_;
  249.     $pict .= pack('n',0x0030) . $rect;
  250. }
  251.  
  252. sub PaintRect {
  253.     local($rect) = @_;
  254.     $pict .= pack('n',0x0031) . $rect;
  255. }
  256.  
  257. sub EraseRect {
  258.     local($rect) = @_;
  259.     $pict .= pack('n',0x0032) . $rect;
  260. }
  261.  
  262. sub InvertRect {
  263.     local($rect) = @_;
  264.     $pict .= pack('n',0x0033) . $rect;
  265. }
  266.  
  267. sub FillRect {
  268.     local($rect,$pattern) = @_;
  269.     local($oldpat) = $_PnPattern;
  270.     &PenPat($pattern);
  271.     &PaintRect($rect);
  272.     &PenPat($oldpat);
  273. }
  274.  
  275. sub FrameOval {
  276.     local($rect) = @_;
  277.     $pict .= pack('n',0x0050) . $rect;
  278. }
  279.  
  280. sub PaintOval {
  281.     local($rect) = @_;
  282.     $pict .= pack('n',0x0051) . $rect;
  283. }
  284.  
  285. sub EraseOval {
  286.     local($rect) = @_;
  287.     $pict .= pack('n',0x0052) . $rect;
  288. }
  289.  
  290. sub InvertOval {
  291.     local($rect) = @_;
  292.     $pict .= pack('n',0x0053) . $rect;
  293. }
  294.  
  295. sub FillOval {
  296.     local($rect,$pattern) = @_;
  297.     local($oldpat) = $_PnPattern;
  298.     &PenPat($pattern);
  299.     &PaintOval($rect);
  300.     &PenPat($oldpat);
  301. }
  302.  
  303. sub FrameArc {
  304.     local($rect,$startAngle,$arcAngle) = @_;
  305.     $pict .= pack('n',0x0060) . $rect;
  306.     $pict .= pack('nn',$startAngle,$arcAngle);
  307. }
  308.  
  309. sub PaintArc {
  310.     local($rect,$startAngle,$arcAngle) = @_;
  311.     $pict .= pack('n',0x0061) . $rect;
  312.     $pict .= pack('nn',$startAngle,$arcAngle);
  313. }
  314.  
  315. sub EraseArc {
  316.     local($rect,$startAngle,$arcAngle) = @_;
  317.     $pict .= pack('n',0x0062) . $rect;
  318.     $pict .= pack('nn',$startAngle,$arcAngle);
  319. }
  320.  
  321. sub InvertArc {
  322.     local($rect,$startAngle,$arcAngle) = @_;
  323.     $pict .= pack('n',0x0063) . $rect;
  324.     $pict .= pack('nn',$startAngle,$arcAngle);
  325. }
  326.  
  327. sub FillArc {
  328.     local($rect,$startAngle,$arcAngle,$pattern) = @_;
  329.     local($oldpat) = $_PnPattern;
  330.     &PenPat($pattern);
  331.     &PaintArc($rect,$startAngle,$arcAngle);
  332.     &PenPat($oldpat);
  333. }
  334.  
  335. sub FrameRoundRect {
  336.     local($rect,$ovalWidth,$ovalHeight) = @_;
  337.     unless ($_roundRectCurvature eq "$ovalWidth $ovalHeight") {
  338.         $pict .= pack('nn2',0x000B,$ovalHeight,$ovalWidth);
  339.         $_roundRectCurvature = "$ovalWidth $ovalHeight";
  340.     }
  341.     $pict .= pack('n',0x0040) . $rect;
  342. }
  343.  
  344. sub PaintRoundRect {
  345.     local($rect,$ovalWidth,$ovalHeight) = @_;
  346.     unless ($_roundRectCurvature eq "$ovalWidth $ovalHeight") {
  347.         $pict .= pack('nn2',0x000B,$ovalHeight,$ovalWidth);
  348.         $_roundRectCurvature = "$ovalWidth $ovalHeight";
  349.     }
  350.     $pict .= pack('n',0x0041) . $rect;
  351. }
  352.  
  353. sub EraseRoundRect {
  354.     local($rect,$ovalWidth,$ovalHeight) = @_;
  355.     unless ($_roundRectCurvature eq "$ovalWidth $ovalHeight") {
  356.         $pict .= pack('nn2',0x000B,$ovalHeight,$ovalWidth);
  357.         $_roundRectCurvature = "$ovalWidth $ovalHeight";
  358.     }
  359.     $pict .= pack('n',0x0042) . $rect;
  360. }
  361.  
  362. sub InvertRoundRect {
  363.     local($rect,$ovalWidth,$ovalHeight) = @_;
  364.     unless ($_roundRectCurvature eq "$ovalWidth $ovalHeight") {
  365.         $pict .= pack('nn2',0x000B,$ovalHeight,$ovalWidth);
  366.         $_roundRectCurvature = "$ovalWidth $ovalHeight";
  367.     }
  368.     $pict .= pack('n',0x0043) . $rect;
  369. }
  370.  
  371. sub FillRoundRect {
  372.     local($rect,$ovalWidth,$ovalHeight,$pattern) = @_;
  373.     local($oldpat) = $_PnPattern;
  374.     &PenPat($pattern);
  375.     &PaintRoundRect($rect,$ovalWidth,$ovalHeight);
  376.     &PenPat($oldpat);
  377. }
  378.  
  379. sub OpenPoly {
  380.     $_polyName++;
  381.     undef $polySave;            # close one if it was already defined
  382.     *polySave = $_polyName;
  383.     @polySave = (10,0,0,0,0); # initialize it to empty size and rectangle
  384.     return $_polyName;
  385. }
  386.  
  387. sub ClosePoly {
  388.     *polySave = 'scratch';
  389.     undef @polySave;
  390. }
  391.  
  392. sub KillPoly {
  393.     local(*poly) = @_;
  394.     undef @poly;
  395. }
  396.  
  397. sub FramePoly {
  398.     local(*poly) = @_;
  399.     return unless @poly;
  400.     $pict .= pack('n*',0x0070,@poly);
  401. }
  402.  
  403. sub PaintPoly {
  404.     local(*poly) = @_;
  405.     return unless @poly;
  406.     $pict .= pack('n*',0x0071,@poly);
  407. }
  408.  
  409. sub ErasePoly {
  410.     local(*poly) = @_;
  411.     return unless @poly;
  412.     $pict .= pack('n*',0x0072,@poly);
  413. }
  414.  
  415. sub InvertPoly {
  416.     local(*poly) = @_;
  417.     return unless @poly;
  418.     $pict .= pack('n*',0x0073,@poly);
  419. }
  420.  
  421. sub FillPoly {
  422.     local(*poly,$pattern) = @_;
  423.     return unless @poly;
  424.     local($oldpat) = $_PnPattern;
  425.     &PenPat($pattern);
  426.     &PaintPoly(*poly);
  427.     &PenPat($oldpat);
  428. }
  429.  
  430. sub OffsetPoly {
  431.     local(*poly,$dh,$dv) = @_; 
  432.   return unless @poly;
  433.     local($size,@vertices) = @poly;
  434.     local($i);
  435.     for ($i=0;$i<@vertices;$i+=2) {
  436.         $vertices[$i] += $dv;
  437.         $vertices[$i+1] += $dh;
  438.     }
  439.     @poly = ($size,@vertices);
  440. }
  441.  
  442. sub MapPoly {
  443.     local(*poly,$srcRect,$destRect) = @_;
  444.     return unless @poly;
  445.     local($size,@vertices) = @poly;
  446.     local(@src) = unpack('n4',$srcRect);
  447.     local(@dest) = unpack('n4',$destRect);
  448.     local($factorV) = ($dest[2]-$dest[0])/($src[2]-$src[0]);
  449.     local($factorH) = ($dest[3]-$dest[1])/($src[3]-$src[1]);
  450.     for ($i=0;$i<@vertices;$i+=2) {
  451.         $vertices[$i] = int($dest[0] + ($vertices[$i] - $src[0]) * $factorV);
  452.         $vertices[$i+1] = int($dest[1] + ($vertices[$i+1] - $src[1]) * $factorH);
  453.     }
  454.     @poly = ($size,@vertices);
  455. }
  456.  
  457. sub _addVertex {
  458.     local(*polygon,$h,$v) = @_;
  459.     local($size,$top,$left,$bottom,$right,@vertices) = @polygon;
  460.     unless (@vertices) {
  461.         push(@vertices,$currV,$currH);
  462.         $size += 4;
  463.         $top = $bottom = $currV;
  464.         $left = $right = $currH;
  465.     }
  466.  
  467.     push (@vertices,$v,$h);
  468.  
  469.     $size += 4;
  470.     $top = $v if $v < $top;
  471.     $bottom = $v if $v > $bottom;
  472.     $left = $h if $h < $left;
  473.     $right = $h if $h > $right;
  474.     @polygon=($size,$top,$left,$bottom,$right,@vertices);
  475. }
  476.  
  477. sub TextWidth {
  478.     local($text) = @_;
  479.  
  480.     local($face) = 0xFB & $textFace; # underlining don't count
  481.     local($metric_name) = &_getFontMetrics($textFont,$textSize,$face);
  482.     if ($metric_name && (*metrics = $metric_name) && defined(%metrics)) {
  483.         local($length);
  484.         foreach (split('',$text)) {
  485.             $length += $metrics{ord($_)};
  486.         }
  487.         return $length;
  488.     } else {                    # we get here if we don't have any metrics - make it up
  489.         local($extra);
  490.         $extra += $ITALICEXTRA if vec($textFace,$ITALIC,1);
  491.         $extra += $BOLDEXTRA if vec($textFace,$BOLD,1);
  492.         return length($text) * $textSize * ($fudgefactor+$extra);
  493.     }
  494. }
  495.  
  496. sub _getFontMetrics {
  497.     local($font,$size,$face) = @_;
  498.     local($key) = "$font $size $face";
  499.     return $_metricsArrays{$key} if $_metricsArrays{$key};
  500.  
  501.  
  502.     return undef unless $font_metric_files{$key};
  503.  
  504.     return undef if $_failed_metric{$key};
  505.  
  506.     unless (open(BDF,"$font_metric_files{$key}")) {
  507.         $_failed_metric_files{$key}++;
  508.         return undef;
  509.     }
  510.  
  511.     $next_metric++;             # bump up the name
  512.     local(*metrics) = $next_metric; local($char);
  513.     while (<BDF>) {
  514.         next unless /^STARTCHAR/../^ENDCHAR/;
  515.         if (/^ENCODING\s+(\d+)/) { $char = $1; }
  516.         elsif (/^DWIDTH\s+(\d+)/)   { $metrics{$char}=$1; }
  517.     }
  518.     close(BDF);
  519.     
  520.     return $_metricsArrays{$key} = $next_metric;
  521. }
  522.  
  523.  
  524. %font_metric_files = (
  525.                       "22 8 1","$X11FONTS/courB08.bdf",
  526.                       "22 10 1","$X11FONTS/courB10.bdf",
  527.                       "22 12 1","$X11FONTS/courB12.bdf",
  528.                       "22 14 1","$X11FONTS/courB14.bdf",
  529.                       "22 18 1","$X11FONTS/courB18.bdf",
  530.                       "22 24 1","$X11FONTS/courB24.bdf",
  531.                       "22 8 2","$X11FONTS/courO08.bdf",
  532.                       "22 10 2","$X11FONTS/courO10.bdf",
  533.                       "22 12 2","$X11FONTS/courO12.bdf",
  534.                       "22 14 2","$X11FONTS/courO14.bdf",
  535.                       "22 18 2","$X11FONTS/courO18.bdf",
  536.                       "22 24 2","$X11FONTS/courO24.bdf",
  537.                       "22 8 0","$X11FONTS/courR08.bdf",
  538.                       "22 10 0","$X11FONTS/courR10.bdf",
  539.                       "22 12 0","$X11FONTS/courR12.bdf",
  540.                       "22 14 0","$X11FONTS/courR14.bdf",
  541.                       "22 18 0","$X11FONTS/courR18.bdf",
  542.                       "22 24 0","$X11FONTS/courR24.bdf",
  543.                       "21 8 1","$X11FONTS/helvB08.bdf",
  544.                       "21 10 1","$X11FONTS/helvB10.bdf",
  545.                       "21 12 1","$X11FONTS/helvB12.bdf",
  546.                       "21 14 1","$X11FONTS/helvB14.bdf",
  547.                       "21 18 1","$X11FONTS/helvB18.bdf",
  548.                       "21 24 1","$X11FONTS/helvB24.bdf",
  549.                       "21 8 2","$X11FONTS/helvO08.bdf",
  550.                       "21 10 2","$X11FONTS/helvO10.bdf",
  551.                       "21 12 2","$X11FONTS/helvO12.bdf",
  552.                       "21 14 2","$X11FONTS/helvO14.bdf",
  553.                       "21 18 2","$X11FONTS/helvO18.bdf",
  554.                       "21 24 2","$X11FONTS/helvO24.bdf",
  555.                       "21 8 0","$X11FONTS/helvR08.bdf",
  556.                       "21 10 0","$X11FONTS/helvR10.bdf",
  557.                       "21 12 0","$X11FONTS/helvR12.bdf",
  558.                       "21 14 0","$X11FONTS/helvR14.bdf",
  559.                       "21 18 0","$X11FONTS/helvR18.bdf",
  560.                       "21 24 0","$X11FONTS/helvR24.bdf",
  561.                       "20 8 1","$X11FONTS/timB08.bdf",
  562.                       "20 10 1","$X11FONTS/timB10.bdf",
  563.                       "20 12 1","$X11FONTS/timB12.bdf",
  564.                       "20 14 1","$X11FONTS/timB14.bdf",
  565.                       "20 18 1","$X11FONTS/timB18.bdf",
  566.                       "20 24 1","$X11FONTS/timB24.bdf",
  567.                       "20 8 3","$X11FONTS/timBI08.bdf",
  568.                       "20 10 3","$X11FONTS/timBI10.bdf",
  569.                       "20 12 3","$X11FONTS/timBI12.bdf",
  570.                       "20 14 3","$X11FONTS/timBI14.bdf",
  571.                       "20 18 3","$X11FONTS/timBI18.bdf",
  572.                       "20 24 3","$X11FONTS/timBI24.bdf",
  573.                       "20 8 2","$X11FONTS/timI08.bdf",
  574.                       "20 10 2","$X11FONTS/timI10.bdf",
  575.                       "20 12 2","$X11FONTS/timI12.bdf",
  576.                       "20 14 2","$X11FONTS/timI14.bdf",
  577.                       "20 18 2","$X11FONTS/timI18.bdf",
  578.                       "20 24 2","$X11FONTS/timI24.bdf",
  579.                       "20 8 0","$X11FONTS/timR08.bdf",
  580.                       "20 10 0","$X11FONTS/timR10.bdf",
  581.                       "20 12 0","$X11FONTS/timR12.bdf",
  582.                       "20 14 0","$X11FONTS/timR14.bdf",
  583.                       "20 18 0","$X11FONTS/timR18.bdf",
  584.                       "20 24 0","$X11FONTS/timR24.bdf",
  585.                       "34 8 1","$X11FONTS/ncenB08.bdf",
  586.                       "34 10 1","$X11FONTS/ncenB10.bdf",
  587.                       "34 12 1","$X11FONTS/ncenB12.bdf",
  588.                       "34 14 1","$X11FONTS/ncenB14.bdf",
  589.                       "34 18 1","$X11FONTS/ncenB18.bdf",
  590.                       "34 24 1","$X11FONTS/ncenB24.bdf",
  591.                       "34 8 3","$X11FONTS/ncenBI08.bdf",
  592.                       "34 10 3","$X11FONTS/ncenBI10.bdf",
  593.                       "34 12 3","$X11FONTS/ncenBI12.bdf",
  594.                       "34 14 3","$X11FONTS/ncenBI14.bdf",
  595.                       "34 18 3","$X11FONTS/ncenBI18.bdf",
  596.                       "34 24 3","$X11FONTS/ncenBI24.bdf",
  597.                       "34 8 2","$X11FONTS/ncenI08.bdf",
  598.                       "34 10 2","$X11FONTS/ncenI10.bdf",
  599.                       "34 12 2","$X11FONTS/ncenI12.bdf",
  600.                       "34 14 2","$X11FONTS/ncenI14.bdf",
  601.                       "34 18 2","$X11FONTS/ncenI18.bdf",
  602.                       "34 24 2","$X11FONTS/ncenI24.bdf",
  603.                       "34 8 0","$X11FONTS/ncenR08.bdf",
  604.                       "34 10 0","$X11FONTS/ncenR10.bdf",
  605.                       "34 12 0","$X11FONTS/ncenR12.bdf",
  606.                       "34 14 0","$X11FONTS/ncenR14.bdf",
  607.                       "34 18 0","$X11FONTS/ncenR18.bdf",
  608.                       "34 24 0","$X11FONTS/ncenR24.bdf"
  609.                       );
  610. $next_metric = "metrics0000";   # name of our metrics arrays - dynamically allocated
  611.  
  612. 1;
  613. }       #end of package qd
  614.  
  615.